package metier.sess;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import metier.entities.Devise;
import metier.entities.Offre;
import javax.ejb.Schedule;
import javax.ejb.Schedules;


@Stateless(name="Offre")
public class OffreEJBImpl implements IOffreLocal{
	@PersistenceContext(unitName="PU_Cargaison")
	private EntityManager em;
	
	
   
	
	@Override
	public void addOffre(Offre o) {
		em.persist(o);
		
	}

	@Override
	public List<Offre> getAllOffre() {
		Query req=em.createQuery("select o from Offre o");
		return req.getResultList();
	}

	@Override
	public Offre getOffre(Integer Id) {
		Offre offre=em.find(Offre.class, Id);
		if(offre==null)throw new RuntimeException("Offre introuvable");
		return offre;
	}

	@Override
	public void updateOffre(Offre a) {
		em.merge(a);
		
	}

	@Override
	public void deleteOffre(Integer Id) {
		em.remove(getOffre(Id));
		
	}

	@Override
	public List<Offre> getAllOffreActive() {
		Query req=em.createQuery("select o from Offre o where o.statut=true");
		return req.getResultList();
		
	}
	
	//transportType=0 pour road,=1 pour Rail,=2 pour Sea ,=3 pour Air
	@Override
	public List<Offre> getOffreForSearch(Integer transportType)
	{
		String a="";
		if(transportType==0)
			a="By road";
		else if(transportType==1)
			a="By rail";
		else if(transportType==2)
			a="By sea";
		else
			a="By air";
		
	
		Query req=em.createNativeQuery("select * from offre where Date_Expiration > NOW() and statutOffre=1 and idDeclarationGnt is null and idTransport in(select idTransport from Transport where intitule='"+a+"') ORDER BY urgent",Offre.class);
        
		
		return req.getResultList();
	}
	
	@Override
	//liste des offres qui appartiennent à un expéditeur selon le status voulu ; 0 pour innactif 1 pour actif ou listed,2 pour chargé,3 pour intransite,4 pour notification,5 pour loaded et enfin 6 pour archiver 
	public List<Offre> listeOffre(Integer i,Integer id,Integer o)
	{
	
	Query req;
	String a="";
	if(id!=null)
	{
		a="and o.Expediteur.IdUtilisateur="+id;
	}
	
		if(o==1)
		{
			 req=em.createQuery("select o from Offre o where o.statutOffre="+i+" and o.DecGanante is null "+a);
		
		}
		else
		{
		req=em.createQuery("select o from Offre o where o.statutOffre="+i+" "+a);
		}
		System.out.println("here"+req.getResultList().size());
		return req.getResultList();
	}

}
